package edu.pe.cayetano.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.apache.commons.beanutils.DynaBean;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.framework.DAOException;
import edu.pe.cayetano.model.bean.HistoriaClinicaArchivoBean;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.Utilitario;
import edu.pe.cayetano.util.UtilitarioTime;

public class HistoriaClinicaDAO extends BaseDAO{


	
	public HistoriaClinicaDAO(Connection cnx) {
		super(cnx);
	}

	public BResult insertaHistoriaClinica(DynaBean dyna) throws Exception {
		
		BResult					ret				= null;
		PreparedStatement		pstmt 		 	= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" INSERT INTO "+schema+"HISTORIA_CLINICA VALUES (?,?,?,?)");
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,Utilitario.getPropertyDynaBean(dyna,"codigo"));
			pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"txtCodigoPaciente"));
			pstmt.setString(3,Utilitario.getPropertyDynaBean(dyna,"cboEspecialidad"));
			pstmt.setString(4,UtilitarioTime.devuelveFechaActual());
			pstmt.executeUpdate();	
			ret = new BResult();
			ret.setCode(0);		
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	} 
	
	public BResult insertaHistoriaClinicaDetalle(DynaBean dyna,String operacion,String codigoArchivo) throws Exception {
		BResult					ret				= null;
		PreparedStatement		pstmt 		 	= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" INSERT INTO "+schema+"HISTORIA_CLINICA_DETALLE (FILEHC,NROHC,MOTIVO_CONSULTA_ACTUAL,MOTIVO_CONSULTA_ANTERIOR,");
			query.append(" FECHA_CREACION,FECHA_ALTA,ESTADO_ID,COD_PERIODO,CODIGO_ALUMNO,CODIGO_MEDDOC,ESPECIALIDAD_ID,");
			query.append(" TIENE_ECG,TIENE_FEX,TIENE_FIN,TIENE_ODO,TIENE_DPS,TIENE_DDF)"); 		
			query.append(" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,codigoArchivo);
			if(ConstantesSECCD.INSERTA_HC_DETALLE.equalsIgnoreCase(operacion))
				pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"codigo"));
			if(ConstantesSECCD.INSERTA_HC_DETALLE_FILE.equalsIgnoreCase(operacion))
				pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"txtHC"));
			pstmt.setString(3,Utilitario.getPropertyDynaBean(dyna,"txtMotivoActual"));
			pstmt.setString(4,Utilitario.getPropertyDynaBean(dyna,"txtMotivoAnterior"));
			pstmt.setString(5,UtilitarioTime.devuelveFechaActual());
			pstmt.setString(6,null);
			pstmt.setString(7,ConstantesSECCD.ESTADO_EN_TRAMITE);
			pstmt.setString(8,Utilitario.getPropertyDynaBean(dyna,"cboPeriodo"));
			pstmt.setInt(9,0);
			pstmt.setInt(10,0);
			pstmt.setString(11,Utilitario.getPropertyDynaBean(dyna,"cboSede")); // TODO Corregir :setear la sede
			pstmt.setInt(12,0);
			pstmt.setInt(13,0);
			pstmt.setInt(14,0);
			pstmt.setInt(15,0);
			pstmt.setInt(16,0);
			pstmt.setInt(17,0);
			
			pstmt.executeUpdate();	
			ret = new BResult();
			ret.setCode(0);		
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	} 
	
	
	public BResult editaArchivoHC(DynaBean dyna) throws Exception {
		BResult					ret				= null;
		PreparedStatement		pstmt 		 	= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" UPDATE "+schema+"HISTORIA_CLINICA_DETALLE"); 
			query.append(" SET MOTIVO_CONSULTA_ACTUAL=?,MOTIVO_CONSULTA_ANTERIOR=?,ESPECIALIDAD_ID=?,");
			query.append(" COD_PERIODO=? WHERE FILEHC=?");
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,Utilitario.getPropertyDynaBean(dyna,"txtMotivoActual"));
			pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"txtMotivoAnterior"));
			pstmt.setString(3,Utilitario.getPropertyDynaBean(dyna,"cboEspecialidad"));
			pstmt.setString(4,Utilitario.getPropertyDynaBean(dyna,"cboPeriodo"));
			pstmt.setString(5,Utilitario.getPropertyDynaBean(dyna,"tempArchivo"));
			pstmt.executeUpdate();	
			ret = new BResult();
			ret.setCode(0);		
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	} 
	
	public int cuentaCantidadArchivosxHC(String hc)throws Exception {
		int cantidad=0;
		ResultSet 			rs 			 = null;
		PreparedStatement   pstmt 		 = null;
		try{
			StringBuffer query  = new StringBuffer();
			query.append(" SELECT COUNT(*) FROM "+schema+"HISTORIA_CLINICA_DETALLE WHERE NROHC=?");
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,hc);
			rs=pstmt.executeQuery();
			if(rs.next()){
				cantidad=rs.getInt(1)+1;
			}
		}catch(Exception e){
			throw new DAOException(e.getMessage());
		}finally{
			try{
				try{pstmt.close();}catch(Exception e){}
				try{rs.close();}catch(Exception e){}
			}catch(Exception e1){}
		}
		return cantidad;
	}

	public BResult buscarArchivoHCEspecifico(DynaBean dyna) throws Exception {

		String 							schema				= Configuration.getSchemaDB();
		HistoriaClinicaArchivoBean		historiaTO		 	= null;
		PreparedStatement   			pstmt 		 		= null;
		ResultSet 						rs 			 		= null;
		BResult							ret					= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" SELECT FILEHC,A.NROHC,MOTIVO_CONSULTA_ACTUAL,MOTIVO_CONSULTA_ANTERIOR,A.FECHA_CREACION,");
			query.append(" FECHA_ALTA,ESTADO_ID,COD_PERIODO,SP.SEDE_ID,SP.ESPECIALIDAD_ID FROM "+schema+"HISTORIA_CLINICA_DETALLE A ");
			query.append(" INNER JOIN "+schema+"HISTORIA_CLINICA B ON B.NROHC=A.NROHC");
			query.append(" INNER JOIN "+schema+"ESPECIALIDAD SP ON SP.ESPECIALIDAD_ID=A.ESPECIALIDAD_ID");
			query.append(" WHERE FILEHC=? ");
			System.out.println("query buscarArchivoHCEspecifico:"+query.toString());
			pstmt = getConnection().prepareStatement(query.toString());
			String codigo = Utilitario.getPropertyDynaBean(dyna,"codigo");
			pstmt.setString(1,codigo.substring(2,codigo.length()));
			rs=pstmt.executeQuery();		
			if(rs.next()){
				historiaTO=new HistoriaClinicaArchivoBean();
				historiaTO.setFilehc(rs.getString(1));
				historiaTO.setNrohc(rs.getString(2));
				historiaTO.setMotivoConsultaActual(rs.getString(3));
				historiaTO.setMotivoConsultaAnterior(rs.getString(4));
				historiaTO.setFechaCreacion(rs.getString(5));
				historiaTO.setFechaAlta(rs.getString(6));
				historiaTO.setEstadoId(rs.getString(7));
				historiaTO.setCodPeriodo(rs.getString(8));
				historiaTO.setSedeId(rs.getString(9));
				historiaTO.setEspecialidadId(rs.getString(10));
			}
			ret = new BResult();
			ret.setObject(historiaTO);
			ret.setCode(0);
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
				rs.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	}

	public BResult buscaEstadoUltimoArchivo(DynaBean dyna) throws Exception {

		HistoriaClinicaArchivoBean		historiaTO		 	= null;
		PreparedStatement   			pstmt 		 		= null;
		ResultSet 						rs 			 		= null;
		BResult							ret					= new BResult();
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" SELECT FECHA_CREACION,ESTADO_ID");
			query.append(" FROM "+schema+"HISTORIA_CLINICA_DETALLE WHERE NROHC=? AND ESTADO_ID=5 ORDER BY 1 ");
			if(ConstantesSECCD.DB_DB2.equalsIgnoreCase(Configuration.getConnectionDB())){
				query.append(" FETCH FIRST 1 ROWS ONLY");
			}else{
				query.append(" DESC LIMIT 1");
			}
			System.out.println("query buscaEstadoUltimoArchivo:codigo<"+Utilitario.getPropertyDynaBean(dyna,"codigo")+">");
			System.out.println("query buscaEstadoUltimoArchivo:<"+query.toString()+">");
			
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,Utilitario.getPropertyDynaBean(dyna,"codigo"));
			rs=pstmt.executeQuery();		
			if(rs.next()){
				historiaTO=new HistoriaClinicaArchivoBean();
				historiaTO.setEstadoId(rs.getString(2));
				ret.setObject(historiaTO);
				ret.setCode(0);
			}else{
				historiaTO=new HistoriaClinicaArchivoBean();
				ret.setCode(0);
			}
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
				rs.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	}
}
